import json
import logging
from flask import g
from ..dantic import (
    ParamOutline,
    ParamTitle,
    ParamGenerateSingleParagraph,
    ParamRegenDigest,
)


LOGGER = logging.getLogger(__name__)


def getTitle(param: ParamTitle):

    LOGGER.info(f"getTitle 参数: {param}")
    if param.isVipUser:
        param.size = 6
        keywordNumbser = 10
    else:
        param.size = 2
        keywordNumbser = 4
    user_message = f"你是一名{param.level}学生，要拟定{param.size}个论文的标题.论文是关于'{param.domain}'领域,具体与'{param.topic}'有关。"
    if param.keyword != "":

        user_message += f"论文内容应包含关键字'{param.keyword}'。"

    #      // tt 是英文，kk是用户选择的，默认是中文。大模型跟随问题，不得不这么做。

    user_message += f"论文标题的语言是 {param.lang}。"
    user_message += f"请返回json数据，包含一个名为'titles'的数组,数组中每一项都包含3个字段 :'tt','kk','kws'，分别表示标题的英文版本、{param.lang}版本、{keywordNumbser}个相关的关键字"

    return user_message


def getOutline(param: ParamOutline):

    user_message = f"角色:你是一位{param.level}学生."
    user_message += f"任务:要为一篇题目为'{param.title}'的论文拟定提纲."
    user_message += f"语言:使用写论文的正式语言,{param.style}."
    user_message += f"约束:写作语言是{param.lang},论文包含{param.paragraphCount}段落,每段包含{param.secondParagraphCount}子段落,首先是'绪论',不要'参考文献'和'致谢'."
    user_message += (
        "格式:返回json格式,json数据中，只有一个'subtitle'字段,这个字段的值是数组。"
    )
    user_message += f"数组中每个元素，代表论文的一个段落。每段是一个json字典,其中包含一个'title'字段,表示段落标题。"
    user_message += f"每段包含1个'subtitle'数组,表示该段的子段落,是一个数组,其中每个元素是一个字典,键是'title',值是标题。不要加入'content'字段,不要省略段落"

    return user_message


def generateSingleParagraph(param: ParamGenerateSingleParagraph):
    user_message = f"你是一名世界顶级大学的教授,要写一篇标题为《{param.title}》的论文,"
    user_message += f"其中一段的标题是'{param.paragraphTitle}',但内容不够充实。"
    user_message += f"请重新写这一段,此段内容大约{param.length}字,写作语言是{param.lang},需要使用正式的非生活化的论文语言,句首不要使用关联词。"
    if param.instruction != "":
        user_message += f"要求:'{param.instruction}'."
    user_message += f"只要正文,不要有其他内容,不要有子段落,不要使用markdown语法。"

    return user_message


def generateReference(param: ParamRegenDigest):
    user_message = f"角色:你是一名专家学者."
    user_message += (
        f"任务:给一篇标题为'{param.title}'的论文搜集参考文献清单,中英文文献都可以"
    )
    user_message += f"约束:大约需要10偏左右."
    user_message += (
        "返回结果为json,格式如下--\n[{title:'',author:'',year:'','journal':''}]"
    )

    return user_message


def generateThanks(param: ParamRegenDigest):
    user_message = f"角色:你是一名专家学者."
    user_message += (
        f"任务:给一篇标题为'{param.title}'的论文写致谢词，写作语言是{param.lang}。"
    )
    user_message += f"约束:长度500字，使用正式论文语言。不要使用转折词和连词。"
    user_message += "返回结果为json格式，如下---\n{thanks:'内容'}"

    return user_message


def generateDigest(param: ParamRegenDigest):
    user_message = f"角色:你是一名专家学者."
    user_message += f"任务:给一篇标题为《{param.title}》的论文写一段摘要和10个关键词,写作语言是{param.lang}。"
    user_message += f"约束:长度大于500字，使用正式论文语言。不要使用转折词和连词。"
    user_message += (
        "返回结果为json格式，如下---\n{digest:'摘要',keywords:['词1','词2']}"
    )

    return user_message


def generateDigestEnglish(param: ParamRegenDigest):
    user_message = f"角色:你是一名专家学者."
    user_message += f"任务:给一篇标题为《{param.title}》的论文写一段摘要和10个关键词,写作语言是英语。"
    user_message += f"约束:长度大于500字，使用正式论文语言。不要使用转折词和连词。"
    user_message += (
        "返回结果为json格式，如下---\n{digest:'text',keywords:['word1','word2']}"
    )

    return user_message
